﻿Imports EPSON_Impresora_Fiscal

Module Impresion

    Public printer As EPSON_Impresora_Fiscal.PrinterFiscal = New EPSON_Impresora_Fiscal.PrinterFiscal
    Public respuestaImpresora As Boolean
    Public numeroPuntoVenta As Integer


    Public Function setParametrosImpresora() As Boolean
        Try
            printer.PortNumber = 1 'va a usar el puerto COM1
            printer.BaudRate = 9600 'velocidad con la que trabaja el pf
            printer.MessagesOn = True 'si el control te tira mensajes de error automaticamente los muestra 
            Return True
        Catch ex As Exception
            'MsgBox("Error al obtener el número de punto de venta del controlador", MsgBoxStyle.Critical, "Error")
            'Retorno cero si se produce un error
            Return False
        End Try

    End Function


    Public Function getNroPuntoVenta() As Integer

        Try
            respuestaImpresora = printer.Status("C")

            If respuestaImpresora Then
                numeroPuntoVenta = printer.AnswerField_4
                'retorno el numero del punto de venta del controlador fiscal 
                Return numeroPuntoVenta
            Else
                'pregunto si tiene poco papel permito continuar
                If printer.PrinterStatus.Equals("80A0") Then
                    ' MsgBox("estado impresora: " & printer.PrinterStatus & vbCrLf & "estado fiscal: " & printer.FiscalStatus & vbCrLf & "pv: " & printer.AnswerField_4)
                    numeroPuntoVenta = printer.AnswerField_4
                    'retorno el numero del punto de venta del controlador fiscal 
                    Return numeroPuntoVenta
                Else
                    Return False
                End If
            End If
        Catch ex As Exception
            'MsgBox("Error al obtener el número de punto de venta del controlador", MsgBoxStyle.Critical, "Error")
            'Retorno cero si se produce un error
            Return 0
        End Try

        'MsgBox("estado impresora: " & printer.PrinterStatus & vbCrLf & "estado fiscal: " & printer.FiscalStatus & vbCrLf & "pv: " & printer.AnswerField_4)

    End Function

    'MsgBox("estado impresora: " & printer.AnswerField_3 & vbCrLf & printer.AnswerField_4 & vbCrLf & printer.AnswerField_5)
    'MsgBox("estado impresora: " & printer.AnswerField_6 & vbCrLf & printer.AnswerField_7 & vbCrLf & printer.AnswerField_8)
    'MsgBox("estado impresora: " & printer.AnswerField_9 & vbCrLf & printer.AnswerField_10 & vbCrLf & printer.AnswerField_11)
    'MsgBox("estado impresora: " & printer.AnswerField_12 & vbCrLf & printer.AnswerField_13 & vbCrLf & printer.AnswerField_14)
    'MsgBox("estado impresora: " & printer.AnswerField_15 & vbCrLf & printer.AnswerField_16 & vbCrLf & printer.AnswerField_17)
    'MsgBox("estado impresora: " & printer.AnswerField_18 & vbCrLf & printer.AnswerField_19)

    Public Function imprimir_Cierre_Z() As Boolean


        Try
            respuestaImpresora = printer.CloseJournal("Z", "P")
            MsgBox("mensaje cierre z: " & respuestaImpresora.ToString)
            If respuestaImpresora Then
                Return True
            Else
                'Para el caso que el cierre Z tenga valor cero (0)
                If printer.FiscalStatus.Equals("8220") Then
                    If imprimir_Cierre_X() Then
                        respuestaImpresora = printer.CloseJournal("Z", "P")
                        If respuestaImpresora Then
                            Return True
                        Else
                            Return False
                        End If
                    Else
                        Return False
                    End If
                Else
                    Return False
                End If
            End If

        Catch ex As Exception
            'MsgBox("Error al imprimir cierre Z", MsgBoxStyle.Critical, "Error")
            Return False
        End Try

        'printer.FiscalStatus = 8008 "Impresora fuera de linea"
        'printer.FiscalStatus = 8220 "comando invalido dentro de la jornada fiscal"


    End Function


    Public Function imprimir_Cierre_X() As Boolean


        Try
            respuestaImpresora = printer.CloseJournal("X", "P")
            'respuestaImpresora = printer.CloseJournal("X")
            If respuestaImpresora Then
                Return True
            Else
                Return False
            End If

        Catch ex As Exception
            'MsgBox("Error al imprimir cierre X", MsgBoxStyle.Critical, "Error")
            Return False
        End Try

    End Function

    Public Function imprimirTicket(ByVal precioUnitario As String) As Boolean


        Try

            respuestaImpresora = printer.OpenTicket("G")

            If respuestaImpresora Then
                'respuestaImpresora = printer.SendTicketItem("Service Charge Orfeo", "1000", "10", "2100", "M", "0", "0")
                respuestaImpresora = printer.SendTicketItem("Service Charge Orfeo", "1000", precioUnitario, "2100", "M", "0", "0")
                respuestaImpresora = printer.GetTicketSubtotal("P", "LINDO SUB")
                respuestaImpresora = printer.SendTicketPayment("PAGO", "200", "T")
                respuestaImpresora = printer.CloseTicket
                Return True
            Else
                MsgBox("Error al abrir ticket", MsgBoxStyle.Critical, "Error")
                Return False
            End If

        Catch ex As Exception
            Return False
        End Try

    End Function

    Public Function imprimirNotaCredito(ByVal ticketOriginal As String, ByVal pvOriginal As Integer) As Boolean

        'ABRIR NOTA DE CREDITO 
        Try
            respuestaImpresora = printer.OpenInvoice("M", "", "B", "1", "P",
                "", "I", "F", "Consumidor", "Final", "DNI",
                     "11111111", "N", ".", "", "", ticketOriginal, "Pto.vta. Origen: " & pvOriginal, "C")
            If respuestaImpresora Then
                'ENVIAR ITEM PARA NOTA DE CREDITO 
                respuestaImpresora = printer.SendInvoiceItem("Item NC", "00001000",
                 "000000200", "2100", "M", "00000", "00000000", "Devolucion SC",
                 "", "", "0000", "000000000000000")
                'CERRAR NOTA DE CREDITO 
                respuestaImpresora = printer.CloseInvoice("M", "B", "")
                'respuesta = printer.SendTicketPayment("PAGO1", "200", "T")
                Return True
            Else
                MsgBox("Error al abrir nota de credito", MsgBoxStyle.Critical, "Error")
                Return False
            End If

        Catch ex As Exception
            Return False
        End Try

    End Function


    Public Function quitarSeparadorDecimal(ByVal cadena As String) As String

        'Label2.Caption = Replace(Text1.Text, ".", "")
        Dim auxCadena As String = ""

        auxCadena = Replace(cadena, ",", "")
        auxCadena = Replace(auxCadena, ".", "")
        auxCadena = Replace(auxCadena, "$", "")
        auxCadena = Replace(auxCadena, " ", "")

        Return auxCadena

    End Function


End Module
